파일 시스템
보조 기억장치의 정보를 파일 및 디렉터리(폴더)의 형태로 저장하고 관리할 수 있도록 하는 운영체제 내부 프로그램- 한 운영체제 내에서도 여러 파일 시스템을 이용할 수 있다.
- 파일 시스템이 달라지면 보조기억장치 정보를 다루는 방법이 달라진다.
파일과 디렉터리

파일에 대한 부가 정보를 속성, 또는 메타데이터라고 부른다. → 파일의 형식, 위치, 크기 등의 정보 파일을 다루는 모든 작업은 운영체제에 의해 이뤄진다. 따라서, 응용 프로그램은 임의로 파일을 할당받아 조작하거나 저장할 수 없고, 파일을 다루는 시스템 콜을 이용해야 한다.
파일
파일 디스크립터 프로세스가 시스템 콜을 통해 읽고 쓸 수 있는 10개의 파일을 할당받았다면, 프로세스는 할당 받아 사용중인 파일을 구분할 수 있어야한다.구분을 위해 파일 디스크립터라는 정보를 사용한다. → 윈도우에서는 파일 핸들이라고 부른다.
- 저수준에서 파일을 식별하는 정보로, 0 이상의 정수 형태를 띄고 있다.
- 운영체제는 프로세스가 새로운 파일을 열거나 생성할 때, 해당 파일에 대한 파일 디스크립터를 프로세스에 할당한다.
0, 1, 2는 이미 표준 입력, 표준 출력, 표준 에러를 위해 할당된 파일 디스크립터이다.
디렉터리
운영체제는 파일들을 일목요연하게 관리하기 위해 디렉터리를 사용한다.윈도우 운영체제에서는 디렉터리를 폴더라고 부른다. 디렉터리는 계층적 구조(트리) 를 띄고 있다.

- 루트 디렉터리: 최상위 디렉터리는 흔히 슬래시(/)로 표현
- 경로(path): 디렉터리 정보를 활용해 파일의 특정 위치를 나타낸 것
예)/home/guest/d.jpg
C:₩로 표현하고, 백슬래시(₩)를 디렉터리 구분자로 활용한다.
운영체제에서는 디렉터리도 파일로 간주한다. 디렉터리에 속한 요소의 관련 정보는 테이블(표)의 형태로 표현된다. 테이블에서 행 하나 하나를 디렉터리 엔트리라고 한다.
일부 파일 시스템에서는 디렉터리 엔트리에, 파일 이름과 저장된 위치를 유츄할 수 있는 정보 분만 아니라, 파일의 속성을 함께 명시하기도 한다.
실제 리눅스 운영체제의 디렉터리 엔트리 관련 소스 코드를 살펴보면, 다음과 같은 정보로 구성되어 있다.파일의 아이노드 번호가 파일이 저장된 위치를 유추할 수 있는 정보에 해당한다.
파일 할당
파일과 디렉터리는 어떻게 보조기억장치 안에 저장될까? 운영체제는 파일과 디렉터리를 읽고 쓸 때, 블록이라는 단위로 읽고 쓴다. 즉, 하나의 파일이 보조기억장치에 저장될 때, 하나 이상의 블록을 할당 받아 저장된다. 블록 하나는 4096바이트 정도 이다.연결 할당 (linked allocation)
각 블록의 일부에 다음 블록의 주소를 저장하여, 각각의 블록이 다음 블록을 가리키는 형태로 할당하는 방법이 경우, 디렉터리 엔트리에는 파일 이름과 더불어, 파일을 이루는 첫번째 블록 주소와 파일을 이루는 블록 단위의 길이가 명시된다.
색인 할당
파일을 이루는 모든 블록 주소를 색인 블록(index block)이라는 특별한 블록에 모아 관리하는 방식으로 할당할 수 있다.디렉터리 엔트리에 파일 이름과, 색인 블록 주소가 명시된다. → 색인 블록만 알면 접근하고자 하는 파일 데이터에 접근할 수 있다.
파일 시스템
- 다양한 종류의 파일 시스템이 있다.
- 운영체제마다 각기 다른 파일 시스템을 지원한다.
- 같은 운영체제라도, 다른 파일 시스템을 사용하거나, 하나의 컴퓨터에서 여러 파일 시스템을 사용할 수 있다.
파티셔닝

보조기억장치 영역을 구획하는 작업을 파티셔닝(partioning) 이라고 하며, 파티셔닝이 되어 나누어진 하나의 영역을 파티션(partition)이라고 한다.
포메팅

위 그림은, USB 메모리를 포매팅하는 과정과, 리눅스를 설치하는 과정에서 SSD를 포매팅하는 화면이다. 파일 시스템의 종류는 매우 다양하다. 주로 리눅스 기반의 파일 시스템을 많이 접하게 될텐데, 이는 아이노드라는 색인 블록을 기반으로 파일을 할당한다.
아이노드에는 파일이 저장된 위치와 속성, (파일의 이름을 제외한) 파일의 모든 것이 담겨 있다.
아이노드 기반 파일 시스템


- 첫번째 부트 블록: 실질적인 파일 데이터가 저장되는 영역이 아니고, 부팅과 파티션 관리를 위한 특별한 정보가 모여 있다.
- 블록 그룹
- 슈퍼 블록: 아이노드의 개수, 총 블록의 개수, 블록 크기 등 전체적인 파일 시스템의 정보를 저장
- 그룹 식별자: 블록 그룹에 대한 메타데이터를 저장
- 블록 비트맵: 현재 블록 그룹 내에서 데이터가 어떻게 할당되었는지를 저장
- 아이노드 비트맵: 현재 블록 그룹내에서 아이노드가 어떻게 할당되었는지를 저장
- 데이터 블록: 각 파일의 데이터를 저장